<script setup>
import { onMounted } from "vue";
import pageRefreshManager from "@/utils/pageRefreshManager";

// 初始化页面刷新管理器
onMounted(() => {
  pageRefreshManager.init();
  console.log("页面刷新管理器已初始化");
});
</script>

<script>
export default {
  onLaunch: function () {
    console.log("App Launch");
    this.setupRouteInterceptor();
    this.checkInitialAuth();
  },
  onShow: function () {
    console.log("App Show");
  },
  onHide: function () {
    console.log("App Hide");
  },
  methods: {
    /**
     * 设置路由拦截器
     * 未登录时，只允许访问 login 文件夹内的页面
     */
    setupRouteInterceptor() {
      // 检查是否登录
      const checkLogin = () => {
        try {
          const token = uni.getStorageSync("token3");
          return !!token;
        } catch (e) {
          return false;
        }
      };

      // 判断是否是登录相关页面（login 文件夹内的页面）
      const isLoginPage = (url) => {
        if (!url) return false;
        // 移除 url 中的参数部分
        const path = url.split("?")[0];
        return path.includes("/pages/login/");
      };

      // 拦截器逻辑
      const interceptor = {
        invoke: (args) => {
          const isLogin = checkLogin();
          const targetUrl = args.url || "";

          console.log("🔍 路由拦截:", {
            目标页面: targetUrl,
            登录状态: isLogin,
            是否登录页: isLoginPage(targetUrl),
          });

          // 如果已登录，或者访问的是登录相关页面，放行
          if (isLogin || isLoginPage(targetUrl)) {
            return true;
          }

          // 未登录且访问非登录页面，拦截并跳转到登录页
          console.warn("⚠️ 未登录，拦截访问:", targetUrl);
          uni.showToast({
            title: "请先登录",
            icon: "none",
            duration: 1500,
          });

          setTimeout(() => {
            uni.reLaunch({
              url: "/pages/login/login",
            });
          }, 1500);

          return false; // 拦截
        },
      };

      // 拦截所有路由跳转方法
      uni.addInterceptor("navigateTo", interceptor);
      uni.addInterceptor("redirectTo", interceptor);
      uni.addInterceptor("reLaunch", interceptor);
      uni.addInterceptor("switchTab", interceptor);

      console.log("✅ 路由拦截器已设置");
    },

    /**
     * 检查初始启动时的登录状态
     * 防止用户直接访问 URL 或刷新页面绕过登录
     */
    checkInitialAuth() {
      // #ifdef H5
      setTimeout(() => {
        try {
          const token = uni.getStorageSync("token3");
          const isLogin = !!token;

          // 获取当前页面路由
          const pages = getCurrentPages();
          if (pages.length === 0) return;

          const currentPage = pages[pages.length - 1];
          const currentRoute = "/" + currentPage.route;

          console.log("🔍 初始登录检查:", {
            当前页面: currentRoute,
            登录状态: isLogin,
          });

          // 如果未登录且不是登录相关页面，跳转到登录页
          if (!isLogin && !currentRoute.includes("/pages/login/")) {
            console.warn("⚠️ 未登录访问受保护页面，跳转登录页");
            uni.showToast({
              title: "请先登录",
              icon: "none",
              duration: 1500,
            });

            setTimeout(() => {
              uni.reLaunch({
                url: "/pages/login/login",
              });
            }, 1500);
          }
        } catch (e) {
          console.error("检查登录状态失败:", e);
        }
      }, 300); // 延迟执行，确保页面已经加载
      // #endif

      // #ifdef APP-PLUS || MP
      // App 和小程序环境也可以做类似检查
      setTimeout(() => {
        try {
          const token = uni.getStorageSync("token3");
          const isLogin = !!token;

          const pages = getCurrentPages();
          if (pages.length === 0) return;

          const currentPage = pages[pages.length - 1];
          const currentRoute = "/" + currentPage.route;

          if (!isLogin && !currentRoute.includes("/pages/login/")) {
            uni.reLaunch({
              url: "/pages/login/login",
            });
          }
        } catch (e) {
          console.error("检查登录状态失败:", e);
        }
      }, 300);
      // #endif
    },
  },
};
</script>

<style>
/*每个页面公共css */
</style>
